home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / hdsource.zip / HDHS.ASM < prev    next >
Assembly Source File  |  1986-02-24  |  10KB  |  286 lines

  1.      PAGE     64,132            ;PAGE WIDTH,LENGTH
  2.      .SALL
  3.      TITLE     PC/AT DIAGNOSTIC - HEAD SELECT TEST
  4. ; **********************************************************************
  5. ; *                                       *
  6. ; *    MODULE NAME    HDHS                           *
  7. ; *    AUTHOR           JIM BRACKING                       *
  8. ; *                                       *
  9. ; *    DECSRIPTION    THIS PROGRAM PERFORMS THE FOLLOWING           *
  10. ; *               FUNCTIONS:                       *
  11. ; *                                       *
  12. ; *               1. EXECUTE A VERIFY READ TO EVERY HEAD ON       *
  13. ; *              EVERY 10th CYLINDER.                   *
  14. ; *                                       *
  15. ; **********************************************************************
  16. ;
  17. ; **********************************************************************
  18. ; *            EXTERNAL PROGRAM REFERENCES               *
  19. ; **********************************************************************
  20.      EXTRN     SCRMGR:NEAR
  21. ; **********************************************************************
  22. ; *              EXTERNAL DATA REFERENCES               *
  23. ; **********************************************************************
  24.      INCLUDE HDDATA.ASM
  25. ; **********************************************************************
  26. ; *            EXTERNAL SUBROUTINE REFERENCES               *
  27. ; **********************************************************************
  28.      INCLUDE HDSUB.ASM
  29. ; **********************************************************************
  30. ; *                PUBLIC DECLARES                   *
  31. ; **********************************************************************
  32.      PUBLIC  HDHS
  33. ; **********************************************************************
  34. ; *                 MACROS                    *
  35. ; **********************************************************************
  36. ;
  37.      IF1
  38.      INCLUDE HD.MAC
  39.      INCLUDE \SCRMGR\SCRNWORK.MAC
  40.      ENDIF
  41. ; **********************************************************************
  42. ; *                                       *
  43. ; *                   BEGIN                       *
  44. ; *                                       *
  45. ; **********************************************************************
  46. CSEG     SEGMENT PARA PUBLIC 'CODE'
  47.      ASSUME CS:CSEG
  48. HDHS   PROC    NEAR
  49.      ASSUME  DS:CSEG           ;DATA SEGMENT
  50.      JMP     BY_ID               ;JMP AROUND ID
  51.      ID     HDHS
  52.      INCLUDE \SCRMGR\SCRNWORK.ASM
  53. ; **********************************************************************
  54. ; *             EQUATES AND STRUCTURES                *
  55. ; **********************************************************************
  56.      INCLUDE HDEQU.ASM
  57. ; **********************************************************************
  58. ; *                 SCREENS                   *
  59. ; **********************************************************************
  60. ;
  61.   SFIELD X00,X01,,@LABEL,RV,23,02,'CTRL-F1 TO START'
  62.   SFIELD X01,X02,,@LABEL,RV,23,29,'ESC FOR THE MAIN MENU'
  63.   SFIELD X02,X00,,@LABEL,RV,23,62,'CTRL-BRK TO STOP'
  64. ;
  65.   SFIELD XI0,XI1,,@LABEL,LO,19,05,'DRIVE =>'
  66.   SFIELD XI1,XI2,1,@EX+@NUM+@UC+@NFULL+@REQ,LO,19,14
  67.   SFIELD XI2,XI3,,@LABEL,LO,20,05,'(1 OR 2)'
  68.   SFIELD XI3,XI4,,@LABEL,LO,19,20,'RUN CONTINIOUSLY =>'
  69.   SFIELD XI4,XI5,1,@UC+@EX+@YN+@NFULL+@REQ,LO,19,40
  70.   SFIELD XI5,XI0,,@LABEL,LO,20,26,'(Y OR N)'
  71. ;
  72.   SFIELD XS0,XS1,,@LABEL,LO,19,46,'STATUS =>'
  73.   SFIELD XS1,XS0,,@LABEL,LO,19,56,'** IDLE **   '
  74. ;
  75.   SFIELD XS2,XS3,,@LABEL,LO,19,46,'STATUS =>'
  76.   SFIELD XS3,XS2,,@LABEL,HI,19,56,'** WORKING **'
  77. ;
  78.   SFIELD XC0,XC1,,@LABEL,LO,20,46,'CYLINDER =>'
  79.   SFIELD XC1,XC0,04,@LABEL,LO,20,58
  80. ;
  81.   SFIELD XE0,XE1,,@LABEL,LO,21,46,'ERRORS =>'
  82.   SFIELD XE1,XE0,05,@LABEL,LO,21,56
  83. ;
  84.   SFIELD T05,T05,,@LABEL,RV,17,33,'HEAD SELECT'
  85. ;
  86. ;
  87. BY_ID:
  88. HDHS   ENDP
  89. ; *********************************************************************
  90. ; *                                      *
  91. ; *                HEAD SELECT TEST                  *
  92. ; *                                      *
  93. ; *********************************************************************
  94. HS     PROC
  95.      CLS     LO,4,1,23,78           ;CLEAR THE SCREEN
  96.      BOX     17,0,08,80,LO           ;OUTLINE
  97.      WRITEC  0CCH,LO,17,0,1        ;  THE
  98.      WRITEC  0B9H,LO,17,79,1       ;  SCREEN
  99.      WRITE     T05               ;TYPE OF TEST
  100.      WRITE     X00               ;COMMANDS
  101. HS_00:
  102.      WRITE     XS0               ;STATUS
  103.      LEA     BX,XI1            ;DRIVE ENTRY
  104.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  105.      CMP     ALL_SW,0FFH           ;RUN ALL TEST??
  106.      JE     HS_01               ;YES
  107.      MOV     [BX].S_DATA,' '       ;CLEAR DRIVE
  108.      JMP     HS_01A
  109. HS_01:
  110.      LEA     BX,XI4            ;Y/N ENTRY
  111.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  112.      MOV     [BX].S_DATA,'Y'       ;DEFAULT NO
  113.      MOV     AL,DR               ;FETCH DRIVE
  114.      INC     AL               ;NUMBER
  115.      OR     AL,30H            ;MAKE IT A NUMBER
  116.      MOV     [BX].S_DATA,AL        ;SET IT IN THE MSG
  117.      WRITE     XI0               ;DRIVE + INTERLEAVE
  118.      JMP     HS_20               ;CONTINUE
  119. HS_01A:
  120.      LEA     BX,XI4            ;Y/N ENTRY
  121.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  122.      MOV     [BX].S_DATA,'N'       ;DEFAULT NO
  123.      WRITE     XI0               ;DRIVE + INTERLEAVE
  124. HS_02:
  125.      READR     BX               ;FETCH DRIVE AND INTERLEAVE
  126.      CALL     TRANS_KEY           ;TRANSLATE THE KEY
  127.      JNC     HS_04               ;SUCESSFULL
  128. HS_03:
  129.      CALL     BEEP               ;RING THE BELL
  130.      JMP     HS_02               ;TRY AGAIN
  131. HS_04:
  132.      CMP     AL,ESC_KEY           ;ESCAPE KEY??
  133.      JNE     HS_05               ;NO
  134.      JMP     EXIT               ;RETURN
  135. HS_05:
  136.      CMP     AL,C_BRK           ;CONTROL BREAK KEY??
  137.      JNE     HS_07               ;NO
  138.      JMP     HS               ;YES - START OVER
  139. HS_07:
  140.      CMP     AL,C_F1           ;CTRL_F1??
  141.      JNE     HS_03               ;NO - INVALID KEY
  142.      LEA     BX,XI1            ;DRIVE ENTRY
  143.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  144.      MOV     AL,[BX].S_DATA        ;FETCH DRIVE LETTER
  145.      CMP     AL,'1'                ;VALID DRIVE??
  146.      JE     HS_08               ;YES
  147.      CMP     AL,'2'                ;VALID DRIVE??
  148.      JE     HS_08               ;YES
  149.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  150.      PMSG     22               ;DISPLAY THE MESSAGE
  151.      CALL     BEEP               ;RING THE BELL
  152.      WRITE     XI0               ;DRIVE + INTERLEAVE
  153.      JMP     HS_02               ;TRY AGAIN
  154. HS_08:
  155.      AND     AL,0FH            ;ADJUST
  156.      DEC     AL               ;  DRIVE NUMBER
  157.      CMP     AL,NUM_DR           ;DRIVE INSTALLED
  158.      JB     HS_10               ;YES
  159.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  160.      PMSG     21               ;DISPLAY THE MESSAGE
  161.      CALL     BEEP               ;RING THE BELL
  162.      WRITE     XI0               ;DRIVE + INTERLEAVE
  163.      JMP     HS_02               ;TRY AGAIN
  164. HS_10:
  165.      MOV     DR,AL               ;SAVE DRIVE NUMBER
  166.      LEA     BX,XI1            ;DRIVE ENTRY
  167.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  168.      WRITE     XI0               ;DRIVE
  169. HS_20:
  170.      CALL     READ_PARMS           ;FETCH DRIVE PARMS
  171.      MOV     CUR_HD,0           ;INITIALIZE
  172.      MOV     CUR_SEC,1           ; THE
  173.      MOV     CUR_CYL,0           ;  STARTING FIELDS
  174.      MOV     BAD_SEC,0           ;CLEAR THE BAD SEC COUNT
  175.      MOV     ERR_CNT,0           ;CLEAR THE ERROR COUNT
  176.      MOV     NUM_SEC,1           ;NUMBER OF SECTORS
  177.      CALL     UPD_CYL           ;DISPLAY CYLINDER NUMBER
  178.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  179.      WRITE     XS2               ;STATUS
  180.      CLS     LO,4,2,16,78           ;CLEAR THE SCREEN
  181.      CALL     HIDE_CUR           ;HIDE THE CURSOR
  182. ; *********************************************************************
  183. ; *               BEGIN THE TEST                  *
  184. ; *********************************************************************
  185.      CALL     CTLR_DIAG           ;EXECUTE CTLR HDNOSTICS
  186.      JNC     HS_30               ;SUCESSFULL
  187.      PMSG     30,HI               ;FAILED
  188.      MOV     HS_X,30           ;SET CODE
  189.      CMP     ALL_SW,0FFH           ;RUN ALL TEST??
  190.      JE     HS_28               ;YES
  191.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  192.      JMP     HS_00               ;TERMINATE FORMAT
  193. HS_28:
  194.      JMP     EXIT               ;BYE
  195. HS_30:
  196.      PUSH     DS               ;ESTABLISG
  197.      POP     ES               ;  SEGMENT
  198. HS_40:
  199.      MOV     AH,0BH            ;CHECK FOR
  200.      INT     21H               ;  CONTROL BREAK
  201.      CALL     UPD_CYL           ;DISPLAY CURRENT CYLINDER
  202.      MOV     HD_CMD,VER_CMD        ;VERIFY COMMAND
  203.      MOV     NUM_SEC,1           ;NUMBER OF SECTORS
  204.      CALL     EXEC_CMD           ;VERIFY THE SECTOR
  205.      JNC     HS_50               ;SUCESSFULL
  206.      CMP     AL,0FFH           ;CTLR BROKE??
  207.      JNE     HS_48               ;NO
  208.      JMP     HS_70               ;YES
  209. HS_48:
  210.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  211. HS_50:
  212.      MOV     AL,CUR_HD           ;FETCH HEAD NUMBER
  213.      INC     AL               ;NEXT HEAD
  214.      MOV     CUR_HD,AL           ;UPDATE HEAD
  215.      CMP     AL,MAX_HD           ;NEXT CYLINDER??
  216.      JBE     HS_40               ;NO
  217.      MOV     CUR_HD,00H           ;FIRST HEAD
  218.      MOV     AX,CUR_CYL           ;FETCH CURRENT CYLINDER
  219.      ADD     AX,10               ;BUMP CYLINDER COUNT
  220.      MOV     CUR_CYL,AX           ;AND SAVE IT
  221.      CMP     AX,MAX_CYL           ;ALL DONE??
  222.      JB     HS_40               ;NO - PROCESS THIS CYLINDER
  223.      MOV     HD_